import java.io.*;
import java.util.Scanner;

public class Demo12 {
    //扫描指定⽬录，并找到名称或者内容中包含指定字符的所有普通⽂件（不包含⽬录）
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入指定目录：");
        String rootPath = scanner.next();
        File rootFile = new File(rootPath);
        if (!rootFile.isDirectory()){
            System.out.println("输入的路径不是目录：");
            return;
        }
        System.out.println("请输入要搜索的关键字：");
        String keyword = scanner.next();
        scanDir(rootFile,keyword);
    }

    public static void scanDir(File rootFile,String keyword){
        //1.列出当前目录下所有的文件
        File[] files = rootFile.listFiles();
        if (files == null){
            //目录为空
            return;
        }
        //2.遍历目录下所有文件
        for(File file: files){
            if (file.isFile()){
                delFile(file,keyword);
            }else {
                scanDir(file,keyword);
            }
        }
    }

    public static void delFile(File file,String keyword){
        //1.判断文件是否包含关键字
        if (file.getName().contains(keyword)){
            //包含关键字。
            System.out.println("文件名包含关键字：" + file.getAbsoluteFile());
            return;
        }

        //2. 判定文件内容是否包含. 由于 keyword 是字符串. 就按照字符流的方式来处理.
       StringBuilder stringBuilders = new StringBuilder();
       try (Reader reader = new FileReader(file)){
            char[] chars = new char[1024];
            int n = reader.read(chars);
            if (n == -1){
                return;
            }

            stringBuilders.append(chars,0,n);
       } catch (IOException e) {
           throw new RuntimeException(e);
       }

       //判断文件内容是否含有关键字
       if (stringBuilders.indexOf(keyword) >= 0){
           //包含关键字
           System.out.println("文件内容包含关键字：" + file.getAbsoluteFile());
       }
    }
}
